package com.example.baiduapi.Mapper.mysqlMapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.example.baiduapi.pojo.Chatmessage;
import com.example.baiduapi.pojo.UserInfo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.StatementType;

import java.util.List;
import java.util.Map;

@Mapper
@DS("db1") //是使用第一数据源
public interface UserMapper {

    /**
     * 获取所有用户信息
     * @return
     */
    List<Map<String, Object>> getAll();

    /**
     * 根据ID获取用户信息
     * @param ID 用户ID
     * @return
     */
    @Select("SELECT * FROM userInfo WHERE name = #{ID}")
    UserInfo getUserInfoByID(String ID);
    @Select("SELECT * FROM userInfo WHERE loginNumber = #{ID}")
    Map<String, Object> getUserInfoByloginNumber(String ID);

    /**
     * 根据手机号获取用户信息
     * @param ID 用户手机号
     * @return
     */
    @Select("SELECT count(1) FROM userInfo WHERE phone = #{ID}")
    Integer CountUserByPhone(String ID);
    /**
     * 根据手机号获取用户信息
     * @param ID 用户手机号
     * @return
     */
    @Select("SELECT * FROM userInfo WHERE phone = #{ID}")
    UserInfo getUserInfoByPhone(String ID);
    /**
     * 根据手机号获取用户信息
     * @param ID 登录账号
     * @return
     */
    @Select("SELECT * FROM userInfo WHERE loginName = #{loginName}")
    UserInfo getUserInfoByLoginName(String loginName);

    /**
     * 根据ID更新用户名
     * @param ID 用户ID
     * @param name 要更新的用户名
     * @return
     */
    @Select("UPDATE userInfo SET name = #{name} WHERE ID = #{ID}")
    Integer updateNameByID(Integer ID, String name);

    @Select("UPDATE userInfo SET loginNumber = #{number} WHERE name = #{name}")
    Integer updateLoginState(String name, String number);


    /**
     * 新增用户信息
     * @param username 用户名
     * @param password 密码
     * @return 新增行数
     */
    @Select("insert into userInfo (name,phone,password)values " +
            "(#{username},#{username},#{password,jdbcType=VARCHAR})")
    Integer addUserInfo(String username, String password);
    /**
     * 新增用户信息
     * @param username 用户名
     * @param password 密码
     * @return 新增行数
     */
    @Select("update userInfo set password = #{password}")
    Integer updateUserInfo(String username, String password);

    /**
     * 延迟查询
     * @param time 延迟时间
     * @return
     */
    @Select("SELECT SLEEP(#{time})")
    Integer SLEEP(String time);

    /**
     * 根据用户名增加登录次数
     * @param username 用户名
     * @return 操作的行数
     */
    @Select("UPDATE userInfo SET loginNumber = loginNumber + 1 WHERE username = #{username}")
    Integer updateLoginTimesByID(String username);

    /**
     * 查询所有用户信息
     * @return 用户信息的map集合
     */
    @Select("Select * from userInfo")
    List<Map<String,String>> usersInfo();

    /**
     * 根据用户ID获取所有聊天信息
     * @param ID 用户ID
     * @return
     */
    @Select("SELECT * FROM Chatmessage where createUser = #{ID}")
    List<Chatmessage> getChatmessageByCreateID(String ID);

    /**
     * 根据消息ID获取所有消息
     * @param ID 消息ID
     * @return
     */
    @Select("SELECT * FROM Chatmessage where ID = #{ID}")
    List<Chatmessage> getChatmessageByID(String ID);

    /**
     * 获取全部消息
     * @return
     */
    @Select("SELECT * FROM Chatmessage")
    List<Chatmessage> getChatmessageAll();

    /**
     * 根据时间获取消息信息
     * @param begin 开始时间
     * @param end 结束时间
     * @return
     */
    @Select("SELECT * FROM Chatmessage where createTime between #{begin} and #{end}")
    List<Chatmessage> getChatmessageByTime(String begin,String end);

    /**
     * 根据开始时间结束时间和发送消息ID获取消息信息
     * @param ID 发送人ID
     * @param begin 开始时间
     * @param end 结束时间
     * @return
     */
    @Select("SELECT * FROM Chatmessage where createUser = #{ID} createTime between #{begin} and #{end}")
    List<Chatmessage> getChatmessageByIDAndTime(String ID, String begin, String end);
    /**
     * 根据发送人ID新增消息
     */
    @Insert("INSERT INTO Chatmessage (ID,messageInfo,createTime,createUser,lookState,showState,comment,CopDay) VALUES (#{ID}, #{messageInfo}, #{createTime}, #{createUser}, #{lookState}, #{showState}, #{comment}, #{CopDay})")
    Integer addChatmessage(Chatmessage Chatmessage);

}
